import { call, put, takeLatest } from 'redux-saga/effects'

import { getBannerListData, getProListData } from '../api/pro'

import * as types from './types'
/*
    call: 是用来触发异步操作用的
    put: 和 dispatch 功能一样，可以用来触发 redux 事件
    takeLatest: 用来监听 saga 事件用的
*/

// 一个异步方法
function* getBannerListAction() {
    // call 用来发送数据请求
    const res = yield call(getBannerListData)

    // put 用来修改全局状态中的数据的
    yield put({
        type: types.CHANGE_BANNER_LIST,
        payload: res.data.data
    })
}

function* getProListAction(action) {
    // call 触发数据请求，参数 1 是请求的函数，参数 2 是请求的参数
    const res = yield call(getProListData, action.payload)

    yield put({
        type: types.CHANGE_PRO_LIST,
        payload: res.data.data
    })
}

function* mySaga() {
    // takeLatest 监听执行一个任务
    // takeLatest(需要监听的任务名称，监听到任务后需要执行的异步函数)
    yield takeLatest(types.REQUEST_BANNER, getBannerListAction)
    yield takeLatest(types.REQUEST_PRO, getProListAction)
}

export default mySaga